package qiaojiemoshi;

public abstract class Shape {
    protected DrawAPI drawAPI;
    protected Shape(DrawAPI drawAPI){
        this.drawAPI = drawAPI;
    }
    public abstract void draw();
}

//这是一个抽象类 Shape，它具有以下特点：
//这个类是抽象的，不能被实例化，只能被继承。
//这个类有一个 protected 的成员变量 drawAPI，这个成员变量是一个接口类型的引用，用于指向一个实现了 DrawAPI 接口的对象。
//这个类有一个构造方法，它接受一个 DrawAPI 类型的参数，用于初始化 drawAPI 成员变量。
//这个类有一个抽象方法 draw()，需要被子类实现，用于绘制具体的图形。
//这个抽象类的设计是为了让具体的图形类继承它，并实现 draw() 方法，
// 从而实现具体的图形绘制。同时，通过将 drawAPI 成员变量的类型设置为 DrawAPI 接口
// ，可以使得具体的图形类与绘制 API 解耦，从而提高代码的灵活性和可维护性。


//这段代码是 Bridge Pattern 的核心代码之一。
// 它定义了 Shape 类和 DrawAPI 接口之间的桥接接口，
// 并将具体的实现部分传递给了抽象部分。
//具体来说，protected DrawAPI drawAPI;
// 定义了一个 protected 访问修饰符的成员变量 drawAPI，
// 用于保存 DrawAPI 类型的实例。
// protected 访问修饰符表示该成员变量可以被子类访问，
// 但是不能被同一个包中的非子类访问。
//protected Shape(DrawAPI drawAPI){}
// 定义了一个带有一个 DrawAPI 类型参数的构造方法，
// 用于将具体实现部分传递给抽象部分。在该构造方法中，
// this.drawAPI = drawAPI; 将传递进来的 drawAPI 对象保存到 drawAPI 成员变量中。
//通过这样的方式，抽象部分 Shape 和具体实现部分 DrawAPI 得以连接在一起，
// 形成 Bridge Pattern 的结构。在 Circle 和 Square 类中，通过调用 super(drawAPI) 方法
// ，将 drawAPI 对象传递给父类 Shape，从而完成了抽象部分和实现部分的桥接。
//